package es.eupt.amazingpi.server.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import es.eupt.amazingpi.model.juego.Partida;
import es.eupt.amazingpi.model.usuario.Usuario;
import es.eupt.amazingpi.util.TipoPartida;

public class PartidaBD implements PartidaDao {

	public final static String TABLE_NAME = "partida";
	public final static String TABLE_RELACION = "partidausuario";
	public final static String FIELD_ID = "id";
	public final static String FIELD_NOMBRE = "nombre";
	public final static String FIELD_TIPO_PARTIDA = "tipoPartida";
	public final static String FIELD_LIDER_PARTIDA = "liderPartida";
	
	ConexionBD conexion;
	
	public PartidaBD (){
		conexion = new ConexionBD();
	}
	
	@Override
	public boolean insertar(Partida elemento) throws SQLException {
		Connection con = conexion.conectar();
		String sql = "INSERT INTO " + TABLE_NAME;
		sql += " ("+FIELD_NOMBRE+", "+FIELD_TIPO_PARTIDA+", "+FIELD_LIDER_PARTIDA+") ";
		sql += " VALUES ('"+elemento.getNombre()+"', '"+elemento.getTipoPartida()+"', '"+elemento.getLiderPartida().getNombre()+"')";
		PreparedStatement stm = con.prepareStatement(sql);
		if (stm.executeUpdate()<=0){
			return false;
		}
		return true;
	}
	
	public boolean addToPartida (Usuario usuario, Partida partida) throws SQLException{
		
		Connection con = conexion.conectar();
		String sql = "INSERT INTO " + TABLE_RELACION;
		sql += " VALUES ("+partida.getId()+","+usuario.getId()+")";
		PreparedStatement stm = con.prepareStatement(sql);
		if (stm.executeUpdate()<=0){
			conexion.desconectar(con);
			return false;
		}
		conexion.desconectar(con);
		return true;
	}

	@Override
	public boolean eliminar(Partida elemento) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean existe(Integer clave) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean modificar(Partida elemento) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Partida buscar(Partida elemento) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public Partida buscarPorLiderNombre(Usuario lider, String nombre) throws SQLException{
		Connection con = conexion.conectar();
		Statement consulta = con.createStatement();
		String query = "SELECT * FROM partida WHERE nombre LIKE '" + nombre + "' AND liderPartida LIKE '"+lider.getNombre()+"'";
		ResultSet tabla = consulta.executeQuery(query);
		if (tabla.first()){
			Partida partida = new Partida();
			partida.setId(tabla.getLong(FIELD_ID));
			partida.setNombre(tabla.getString(FIELD_NOMBRE));
			partida.setTipoPartida(TipoPartida.valueOf(tabla.getString(FIELD_TIPO_PARTIDA)));
			conexion.desconectar(con);
			return partida;
		}
		conexion.desconectar(con);
		return null;
	}
	

}
